home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / FROMUTS / CDUNGEON / !CDUNGEON / c / NOBJS < prev    next >
Text File  |  1991-05-20  |  20KB  |  944 lines

  1. /* NOBJS-    NEW OBJECTS PROCESSOR */
  2. /*     OBJECTS IN THIS MODULE CANNOT CALL RMINFO, JIGSUP, */
  3. /*     MAJOR VERBS, OR OTHER NON-RESIDENT SUBROUTINES */
  4.  
  5. /*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/
  6. /* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */
  7. /* WRITTEN BY R. M. SUPNIK */
  8.  
  9. #include "funcs.h"
  10. #include "vars.h"
  11.  
  12. static logical mirpan_ P((integer, logical));
  13.  
  14. logical nobjs_(ri, arg)
  15. integer ri;
  16. integer arg;
  17. {
  18.     /* System generated locals */
  19.     integer i__1, i__2;
  20.     logical ret_val;
  21.  
  22.     /* Local variables */
  23.     logical f;
  24.     integer target;
  25.     integer i;
  26.     integer j;
  27.     integer av, wl;
  28.     integer nxt, odi2 = 0, odo2 = 0;
  29.  
  30.     if (prsvec_1.prso != 0) {
  31.     odo2 = objcts_1.odesc2[prsvec_1.prso - 1];
  32.     }
  33.     if (prsvec_1.prsi != 0) {
  34.     odi2 = objcts_1.odesc2[prsvec_1.prsi - 1];
  35.     }
  36.     av = advs_1.avehic[play_1.winner - 1];
  37.     ret_val = TRUE_;
  38.  
  39.     switch (ri - 31) {
  40.     case 1:  goto L1000;
  41.     case 2:  goto L2000;
  42.     case 3:  goto L3000;
  43.     case 4:  goto L4000;
  44.     case 5:  goto L5000;
  45.     case 6:  goto L6000;
  46.     case 7:  goto L7000;
  47.     case 8:  goto L8000;
  48.     case 9:  goto L9000;
  49.     case 10:  goto L10000;
  50.     case 11:  goto L11000;
  51.     case 12:  goto L12000;
  52.     case 13:  goto L13000;
  53.     case 14:  goto L14000;
  54.     case 15:  goto L15000;
  55.     case 16:  goto L16000;
  56.     case 17:  goto L17000;
  57.     case 18:  goto L18000;
  58.     case 19:  goto L19000;
  59.     case 20:  goto L20000;
  60.     case 21:  goto L21000;
  61.     }
  62.     bug_(6, ri);
  63.  
  64. /* RETURN HERE TO DECLARE FALSE RESULT */
  65.  
  66. L10:
  67.     ret_val = FALSE_;
  68.     return ret_val;
  69.  
  70. /* O32--    BILLS */
  71.  
  72. L1000:
  73.     if (prsvec_1.prsa != vindex_1.eatw) {
  74.     goto L1100;
  75.     }
  76. /*                         !EAT? */
  77.     rspeak_(639);
  78. /*                         !JOKE. */
  79.     return ret_val;
  80.  
  81. L1100:
  82.     if (prsvec_1.prsa == vindex_1.burnw) {
  83.     rspeak_(640);
  84.     }
  85. /*                         !BURN?  JOKE. */
  86.     goto L10;
  87. /*                         !LET IT BE HANDLED. */
  88. /* NOBJS, PAGE 3 */
  89.  
  90. /* O33--    SCREEN OF LIGHT */
  91.  
  92. L2000:
  93.     target = oindex_1.scol;
  94. /*                         !TARGET IS SCOL. */
  95. L2100:
  96.     if (prsvec_1.prso != target) {
  97.     goto L2400;
  98.     }
  99. /*                         !PRSO EQ TARGET? */
  100.     if (prsvec_1.prsa != vindex_1.pushw && prsvec_1.prsa != vindex_1.movew && 
  101.         prsvec_1.prsa != vindex_1.takew && prsvec_1.prsa != vindex_1.rubw)
  102.          {
  103.     goto L2200;
  104.     }
  105.     rspeak_(673);
  106. /*                         !HAND PASSES THRU. */
  107.     return ret_val;
  108.  
  109. L2200:
  110.     if (prsvec_1.prsa != vindex_1.killw && prsvec_1.prsa != vindex_1.attacw &&
  111.          prsvec_1.prsa != vindex_1.mungw) {
  112.     goto L2400;
  113.     }
  114.     rspsub_(674, odi2);
  115. /*                         !PASSES THRU. */
  116.     return ret_val;
  117.  
  118. L2400:
  119.     if (prsvec_1.prsa != vindex_1.throww || prsvec_1.prsi != target) {
  120.     goto L10;
  121.     }
  122.     if (play_1.here == rindex_1.bkbox) {
  123.     goto L2600;
  124.     }
  125. /*                         !THRU SCOL? */
  126.     newsta_(prsvec_1.prso, 0, rindex_1.bkbox, 0, 0);
  127. /*                         !NO, THRU WALL. */
  128.     rspsub_(675, odo2);
  129. /*                         !ENDS UP IN BOX ROOM. */
  130.     cevent_1.ctick[cindex_1.cevscl - 1] = 0;
  131. /*                         !CANCEL ALARM. */
  132.     screen_1.scolrm = 0;
  133. /*                         !RESET SCOL ROOM. */
  134.     return ret_val;
  135.  
  136. L2600:
  137.     if (screen_1.scolrm == 0) {
  138.     goto L2900;
  139.     }
  140. /*                         !TRIED TO GO THRU? */
  141.     newsta_(prsvec_1.prso, 0, screen_1.scolrm, 0, 0);
  142. /*                         !SUCCESS. */
  143.     rspsub_(676, odo2);
  144. /*                         !ENDS UP SOMEWHERE. */
  145.     cevent_1.ctick[cindex_1.cevscl - 1] = 0;
  146. /*                         !CANCEL ALARM. */
  147.     screen_1.scolrm = 0;
  148. /*                         !RESET SCOL ROOM. */
  149.     return ret_val;
  150.  
  151. L2900:
  152.     rspeak_(213);
  153. /*                         !CANT DO IT. */
  154.     return ret_val;
  155. /* NOBJS, PAGE 4 */
  156.  
  157. /* O34--    GNOME OF ZURICH */
  158.  
  159. L3000:
  160.     if (prsvec_1.prsa != vindex_1.givew && prsvec_1.prsa != vindex_1.throww) {
  161.  
  162.     goto L3200;
  163.     }
  164.     if (objcts_1.otval[prsvec_1.prso - 1] != 0) {
  165.     goto L3100;
  166.     }
  167. /*                         !THROW A TREASURE? */
  168.     newsta_(prsvec_1.prso, 641, 0, 0, 0);
  169. /*                         !NO, GO POP. */
  170.     return ret_val;
  171.  
  172. L3100:
  173.     newsta_(prsvec_1.prso, 0, 0, 0, 0);
  174. /*                         !YES, BYE BYE TREASURE. */
  175.     rspsub_(642, odo2);
  176.     newsta_(oindex_1.zgnom, 0, 0, 0, 0);
  177. /*                         !BYE BYE GNOME. */
  178.     cevent_1.ctick[cindex_1.cevzgo - 1] = 0;
  179. /*                         !CANCEL EXIT. */
  180.     f = moveto_(rindex_1.bkent, play_1.winner);
  181. /*                         !NOW IN BANK ENTRANCE. */
  182.     return ret_val;
  183.  
  184. L3200:
  185.     if (prsvec_1.prsa != vindex_1.attacw && prsvec_1.prsa != vindex_1.killw &&
  186.          prsvec_1.prsa != vindex_1.mungw) {
  187.     goto L3300;
  188.     }
  189.     newsta_(oindex_1.zgnom, 643, 0, 0, 0);
  190. /*                         !VANISH GNOME. */
  191.     cevent_1.ctick[cindex_1.cevzgo - 1] = 0;
  192. /*                         !CANCEL EXIT. */
  193.     return ret_val;
  194.  
  195. L3300:
  196.     rspeak_(644);
  197. /*                         !GNOME IS IMPATIENT. */
  198.     return ret_val;
  199.  
  200. /* O35--    EGG */
  201.  
  202. L4000:
  203.     if (prsvec_1.prsa != vindex_1.openw || prsvec_1.prso != oindex_1.egg) {
  204.     goto L4500;
  205.     }
  206.     if (! ((objcts_1.oflag2[oindex_1.egg - 1] & OPENBT) != 0)) {
  207.     goto L4100;
  208.     }
  209. /*                         !OPEN ALREADY? */
  210.     rspeak_(649);
  211. /*                         !YES. */
  212.     return ret_val;
  213.  
  214. L4100:
  215.     if (prsvec_1.prsi != 0) {
  216.     goto L4200;
  217.     }
  218. /*                         !WITH SOMETHING? */
  219.     rspeak_(650);
  220. /*                         !NO, CANT. */
  221.     return ret_val;
  222.  
  223. L4200:
  224.     if (prsvec_1.prsi != oindex_1.hands) {
  225.     goto L4300;
  226.     }
  227. /*                         !WITH HANDS? */
  228.     rspeak_(651);
  229. /*                         !NOT RECOMMENDED. */
  230.     return ret_val;
  231.  
  232. L4300:
  233.     i = 652;
  234. /*                         !MUNG MESSAGE. */
  235.     if ((objcts_1.oflag1[prsvec_1.prsi - 1] & TOOLBT) != 0 || (
  236.         objcts_1.oflag2[prsvec_1.prsi - 1] & WEAPBT) != 0) {
  237.     goto L4600;
  238.     }
  239.     i = 653;
  240. /*                         !NOVELTY 1. */
  241.     if ((objcts_1.oflag2[prsvec_1.prso - 1] & FITEBT) != 0) {
  242.     i = 654;
  243.     }
  244.     objcts_1.oflag2[prsvec_1.prso - 1] |= FITEBT;
  245.     rspsub_(i, odi2);
  246.     return ret_val;
  247.  
  248. L4500:
  249.     if (prsvec_1.prsa != vindex_1.openw && prsvec_1.prsa != vindex_1.mungw) {
  250.     goto L4800;
  251.     }
  252.     i = 655;
  253. /*                         !YOU BLEW IT. */
  254. L4600:
  255.     newsta_(oindex_1.begg, i, objcts_1.oroom[oindex_1.egg - 1], 
  256.         objcts_1.ocan[oindex_1.egg - 1], objcts_1.oadv[oindex_1.egg - 1])
  257.         ;
  258.     newsta_(oindex_1.egg, 0, 0, 0, 0);
  259. /*                         !VANISH EGG. */
  260.     objcts_1.otval[oindex_1.begg - 1] = 2;
  261. /*                         !BAD EGG HAS VALUE. */
  262.     if (objcts_1.ocan[oindex_1.canar - 1] != oindex_1.egg) {
  263.     goto L4700;
  264.     }
  265. /*                         !WAS CANARY INSIDE? */
  266.     rspeak_(objcts_1.odesco[oindex_1.bcana - 1]);
  267. /*                         !YES, DESCRIBE RESULT. */
  268.     objcts_1.otval[oindex_1.bcana - 1] = 1;
  269.     return ret_val;
  270.  
  271. L4700:
  272.     newsta_(oindex_1.bcana, 0, 0, 0, 0);
  273. /*                         !NO, VANISH IT. */
  274.     return ret_val;
  275.  
  276. L4800:
  277.     if (prsvec_1.prsa != vindex_1.dropw || play_1.here != rindex_1.mtree) {
  278.     goto L10;
  279.     }
  280.     newsta_(oindex_1.begg, 658, rindex_1.fore3, 0, 0);
  281. /*                         !DROPPED EGG. */
  282.     newsta_(oindex_1.egg, 0, 0, 0, 0);
  283.     objcts_1.otval[oindex_1.begg - 1] = 2;
  284.     if (objcts_1.ocan[oindex_1.canar - 1] != oindex_1.egg) {
  285.     goto L4700;
  286.     }
  287.     objcts_1.otval[oindex_1.bcana - 1] = 1;
  288. /*                         !BAD CANARY. */
  289.     return ret_val;
  290. /* NOBJS, PAGE 5 */
  291.  
  292. /* O36--    CANARIES, GOOD AND BAD */
  293.  
  294. L5000:
  295.     if (prsvec_1.prsa != vindex_1.windw) {
  296.     goto L10;
  297.     }
  298. /*                         !WIND EM UP? */
  299.     if (prsvec_1.prso == oindex_1.canar) {
  300.     goto L5100;
  301.     }
  302. /*                         !RIGHT ONE? */
  303.     rspeak_(645);
  304. /*                         !NO, BAD NEWS. */
  305.     return ret_val;
  306.  
  307. L5100:
  308.     if (! findex_1.singsf && (play_1.here == rindex_1.mtree || play_1.here >= 
  309.         rindex_1.fore1 && play_1.here < rindex_1.clear)) {
  310.     goto L5200;
  311.     }
  312.     rspeak_(646);
  313. /*                         !NO, MEDIOCRE NEWS. */
  314.     return ret_val;
  315.  
  316. L5200:
  317.     findex_1.singsf = TRUE_;
  318. /*                         !SANG SONG. */
  319.     i = play_1.here;
  320.     if (i == rindex_1.mtree) {
  321.     i = rindex_1.fore3;
  322.     }
  323. /*                         !PLACE BAUBLE. */
  324.     newsta_(oindex_1.baubl, 647, i, 0, 0);
  325.     return ret_val;
  326.  
  327. /* O37--    WHITE CLIFFS */
  328.  
  329. L6000:
  330.     if (prsvec_1.prsa != vindex_1.clmbw && prsvec_1.prsa != vindex_1.clmbuw &&
  331.          prsvec_1.prsa != vindex_1.clmbdw) {
  332.     goto L10;
  333.     }
  334.     rspeak_(648);
  335. /*                         !OH YEAH? */
  336.     return ret_val;
  337.  
  338. /* O38--    WALL */
  339.  
  340. L7000:
  341.     if ((i__1 = play_1.here - findex_1.mloc, abs(i__1)) != 1 || mrhere_(
  342.         play_1.here) != 0 || prsvec_1.prsa != vindex_1.pushw) {
  343.     goto L7100;
  344.     }
  345.     rspeak_(860);
  346. /*                         !PUSHED MIRROR WALL. */
  347.     return ret_val;
  348.  
  349. L7100:
  350.     if ((rooms_1.rflag[play_1.here - 1] & RNWALL) == 0) {
  351.     goto L10;
  352.     }
  353.     rspeak_(662);
  354. /*                         !NO WALL. */
  355.     return ret_val;
  356. /* NOBJS, PAGE 6 */
  357.  
  358. /* O39--    SONG BIRD GLOBAL */
  359.  
  360. L8000:
  361.     if (prsvec_1.prsa != vindex_1.findw) {
  362.     goto L8100;
  363.     }
  364. /*                         !FIND? */
  365.     rspeak_(666);
  366.     return ret_val;
  367.  
  368. L8100:
  369.     if (prsvec_1.prsa != vindex_1.examiw) {
  370.     goto L10;
  371.     }
  372. /*                         !EXAMINE? */
  373.     rspeak_(667);
  374.     return ret_val;
  375.  
  376. /* O40--    PUZZLE/SCOL WALLS */
  377.  
  378. L9000:
  379.     if (play_1.here != rindex_1.cpuzz) {
  380.     goto L9500;
  381.     }
  382. /*                         !PUZZLE WALLS? */
  383.     if (prsvec_1.prsa != vindex_1.pushw) {
  384.     goto L10;
  385.     }
  386. /*                         !PUSH? */
  387.     for (i = 1; i <= 8; i += 2) {
  388. /*                         !LOCATE WALL. */
  389.     if (prsvec_1.prso == puzzle_1.cpwl[i - 1]) {
  390.         goto L9200;
  391.     }
  392. /* L9100: */
  393.     }
  394.     bug_(80, prsvec_1.prso);
  395. /*                         !WHAT? */
  396.  
  397. L9200:
  398.     j = puzzle_1.cpwl[i];
  399. /*                         !GET DIRECTIONAL OFFSET. */
  400.     nxt = findex_1.cphere + j;
  401. /*                         !GET NEXT STATE. */
  402.     wl = puzzle_1.cpvec[nxt - 1];
  403. /*                         !GET C(NEXT STATE). */
  404.     switch (wl + 4) {
  405.     case 1:  goto L9300;
  406.     case 2:  goto L9300;
  407.     case 3:  goto L9300;
  408.     case 4:  goto L9250;
  409.     case 5:  goto L9350;
  410.     }
  411. /*                         !PROCESS. */
  412.  
  413. L9250:
  414.     rspeak_(876);
  415. /*                         !CLEAR CORRIDOR. */
  416.     return ret_val;
  417.  
  418. L9300:
  419.     if (puzzle_1.cpvec[nxt + j - 1] == 0) {
  420.     goto L9400;
  421.     }
  422. /*                         !MOVABLE, ROOM TO MOVE? */
  423. L9350:
  424.     rspeak_(877);
  425. /*                         !IMMOVABLE, NO ROOM. */
  426.     return ret_val;
  427.  
  428. L9400:
  429.     i = 878;
  430. /*                         !ASSUME FIRST PUSH. */
  431.     if (findex_1.cpushf) {
  432.     i = 879;
  433.     }
  434. /*                         !NOT? */
  435.     findex_1.cpushf = TRUE_;
  436.     puzzle_1.cpvec[nxt + j - 1] = wl;
  437. /*                         !MOVE WALL. */
  438.     puzzle_1.cpvec[nxt - 1] = 0;
  439. /*                         !VACATE NEXT STATE. */
  440.     cpgoto_(nxt);
  441. /*                         !ONWARD. */
  442.     cpinfo_(i, nxt);
  443. /*                         !DESCRIBE. */
  444.     princr_(1, play_1.here);
  445. /*                         !PRINT ROOMS CONTENTS. */
  446.     rooms_1.rflag[play_1.here - 1] |= RSEEN;
  447.     return ret_val;
  448.  
  449. L9500:
  450.     if (play_1.here != screen_1.scolac) {
  451.     goto L9700;
  452.     }
  453. /*                         !IN SCOL ACTIVE ROOM? */
  454.     for (i = 1; i <= 12; i += 3) {
  455.     target = screen_1.scolwl[i];
  456. /*                         !ASSUME TARGET. */
  457.     if (screen_1.scolwl[i - 1] == play_1.here) {
  458.         goto L2100;
  459.     }
  460. /*                         !TREAT IF FOUND. */
  461. /* L9600: */
  462.     }
  463.  
  464. L9700:
  465.     if (play_1.here != rindex_1.bkbox) {
  466.     goto L10;
  467.     }
  468. /*                         !IN BOX ROOM? */
  469.     target = oindex_1.wnort;
  470.     goto L2100;
  471. /* NOBJS, PAGE 7 */
  472.  
  473. /* O41--    SHORT POLE */
  474.  
  475. L10000:
  476.     if (prsvec_1.prsa != vindex_1.raisew) {
  477.     goto L10100;
  478.     }
  479. /*                         !LIFT? */
  480.     i = 749;
  481. /*                         !ASSUME UP. */
  482.     if (findex_1.poleuf == 2) {
  483.     i = 750;
  484.     }
  485. /*                         !ALREADY UP? */
  486.     rspeak_(i);
  487.     findex_1.poleuf = 2;
  488. /*                         !POLE IS RAISED. */
  489.     return ret_val;
  490.  
  491. L10100:
  492.     if (prsvec_1.prsa != vindex_1.lowerw && prsvec_1.prsa != vindex_1.pushw) {
  493.  
  494.     goto L10;
  495.     }
  496.     if (findex_1.poleuf != 0) {
  497.     goto L10200;
  498.     }
  499. /*                         !ALREADY LOWERED? */
  500.     rspeak_(751);
  501. /*                         !CANT DO IT. */
  502.     return ret_val;
  503.  
  504. L10200:
  505.     if (findex_1.mdir % 180 != 0) {
  506.     goto L10300;
  507.     }
  508. /*                         !MIRROR N-S? */
  509.     findex_1.poleuf = 0;
  510. /*                         !YES, LOWER INTO */
  511.     rspeak_(752);
  512. /*                         !CHANNEL. */
  513.     return ret_val;
  514.  
  515. L10300:
  516.     if (findex_1.mdir != 270 || findex_1.mloc != rindex_1.mrb) {
  517.     goto L10400;
  518.     }
  519.     findex_1.poleuf = 0;
  520. /*                         !LOWER INTO HOLE. */
  521.     rspeak_(753);
  522.     return ret_val;
  523.  
  524. L10400:
  525.     i__1 = findex_1.poleuf + 753;
  526.     rspeak_(i__1);
  527. /*                         !POLEUF = 1 OR 2. */
  528.     findex_1.poleuf = 1;
  529. /*                         !NOW ON FLOOR. */
  530.     return ret_val;
  531.  
  532. /* O42--    MIRROR SWITCH */
  533.  
  534. L11000:
  535.     if (prsvec_1.prsa != vindex_1.pushw) {
  536.     goto L10;
  537.     }
  538. /*                         !PUSH? */
  539.     if (findex_1.mrpshf) {
  540.     goto L11300;
  541.     }
  542. /*                         !ALREADY PUSHED? */
  543.     rspeak_(756);
  544. /*                         !BUTTON GOES IN. */
  545.     i__1 = objcts_1.olnt;
  546.     for (i = 1; i <= i__1; ++i) {
  547. /*                         !BLOCKED? */
  548.     if (qhere_(i, rindex_1.mreye) && i != oindex_1.rbeam) {
  549.         goto L11200;
  550.     }
  551. /* L11100: */
  552.     }
  553.     rspeak_(757);
  554. /*                         !NOTHING IN BEAM. */
  555.     return ret_val;
  556.  
  557. L11200:
  558.     cevent_1.cflag[cindex_1.cevmrs - 1] = TRUE_;
  559. /*                         !MIRROR OPENS. */
  560.     cevent_1.ctick[cindex_1.cevmrs - 1] = 7;
  561.     findex_1.mrpshf = TRUE_;
  562.     findex_1.mropnf = TRUE_;
  563.     return ret_val;
  564.  
  565. L11300:
  566.     rspeak_(758);
  567. /*                         !MIRROR ALREADYOPEN. */
  568.     return ret_val;
  569. /* NOBJS, PAGE 8 */
  570.  
  571. /* O43--    BEAM FUNCTION */
  572.  
  573. L12000:
  574.     if (prsvec_1.prsa != vindex_1.takew || prsvec_1.prso != oindex_1.rbeam) {
  575.     goto L12100;
  576.     }
  577.     rspeak_(759);
  578. /*                         !TAKE BEAM, JOKE. */
  579.     return ret_val;
  580.  
  581. L12100:
  582.     i = prsvec_1.prso;
  583. /*                         !ASSUME BLK WITH DIROBJ. */
  584.     if (prsvec_1.prsa == vindex_1.putw && prsvec_1.prsi == oindex_1.rbeam) {
  585.     goto L12200;
  586.     }
  587.     if (prsvec_1.prsa != vindex_1.mungw || prsvec_1.prso != oindex_1.rbeam || 
  588.         prsvec_1.prsi == 0) {
  589.     goto L10;
  590.     }
  591.     i = prsvec_1.prsi;
  592. L12200:
  593.     if (objcts_1.oadv[i - 1] != play_1.winner) {
  594.     goto L12300;
  595.     }
  596. /*                         !CARRYING? */
  597.     newsta_(i, 0, play_1.here, 0, 0);
  598. /*                         !DROP OBJ. */
  599.     rspsub_(760, objcts_1.odesc2[i - 1]);
  600.     return ret_val;
  601.  
  602. L12300:
  603.     j = 761;
  604. /*                         !ASSUME NOT IN ROOM. */
  605.     if (qhere_(j, play_1.here)) {
  606.     i = 762;
  607.     }
  608. /*                         !IN ROOM? */
  609.     rspsub_(j, objcts_1.odesc2[i - 1]);
  610. /*                         !DESCRIBE. */
  611.     return ret_val;
  612.  
  613. /* O44--    BRONZE DOOR */
  614.  
  615. L13000:
  616.     if (play_1.here == rindex_1.ncell || findex_1.lcell == 4 && (play_1.here 
  617.         == rindex_1.cell || play_1.here == rindex_1.scorr)) {
  618.     goto L13100;
  619.     }
  620.     rspeak_(763);
  621. /*                         !DOOR NOT THERE. */
  622.     return ret_val;
  623.  
  624. L13100:
  625.     if (! opncls_(oindex_1.odoor, 764, 765)) {
  626.     goto L10;
  627.     }
  628. /*                         !OPEN/CLOSE? */
  629.     if (play_1.here == rindex_1.ncell && (objcts_1.oflag2[oindex_1.odoor - 1] 
  630.         & OPENBT) != 0) {
  631.     rspeak_(766);
  632.     }
  633.     return ret_val;
  634.  
  635. /* O45--    QUIZ DOOR */
  636.  
  637. L14000:
  638.     if (prsvec_1.prsa != vindex_1.openw && prsvec_1.prsa != vindex_1.closew) {
  639.  
  640.     goto L14100;
  641.     }
  642.     rspeak_(767);
  643. /*                         !DOOR WONT MOVE. */
  644.     return ret_val;
  645.  
  646. L14100:
  647.     if (prsvec_1.prsa != vindex_1.knockw) {
  648.     goto L10;
  649.     }
  650. /*                         !KNOCK? */
  651.     if (findex_1.inqstf) {
  652.     goto L14200;
  653.     }
  654. /*                         !TRIED IT ALREADY? */
  655.     findex_1.inqstf = TRUE_;
  656. /*                         !START INQUISITION. */
  657.     cevent_1.cflag[cindex_1.cevinq - 1] = TRUE_;
  658.     cevent_1.ctick[cindex_1.cevinq - 1] = 2;
  659.     findex_1.quesno = rnd_(8);
  660. /*                         !SELECT QUESTION. */
  661.     findex_1.nqatt = 0;
  662.     findex_1.corrct = 0;
  663.     rspeak_(768);
  664. /*                         !ANNOUNCE RULES. */
  665.     rspeak_(769);
  666.     i__1 = findex_1.quesno + 770;
  667.     rspeak_(i__1);
  668. /*                         !ASK QUESTION. */
  669.     return ret_val;
  670.  
  671. L14200:
  672.     rspeak_(798);
  673. /*                         !NO REPLY. */
  674.     return ret_val;
  675.  
  676. /* O46--    LOCKED DOOR */
  677.  
  678. L15000:
  679.     if (prsvec_1.prsa != vindex_1.openw) {
  680.     goto L10;
  681.     }
  682. /*                         !OPEN? */
  683.     rspeak_(778);
  684. /*                         !CANT. */
  685.     return ret_val;
  686.  
  687. /* O47--    CELL DOOR */
  688.  
  689. L16000:
  690.     ret_val = opncls_(oindex_1.cdoor, 779, 780);
  691. /*                         !OPEN/CLOSE? */
  692.     return ret_val;
  693. /* NOBJS, PAGE 9 */
  694.  
  695. /* O48--    DIALBUTTON */
  696.  
  697. L17000:
  698.     if (prsvec_1.prsa != vindex_1.pushw) {
  699.     goto L10;
  700.     }
  701. /*                         !PUSH? */
  702.     rspeak_(809);
  703. /*                         !CLICK. */
  704.     if ((objcts_1.oflag2[oindex_1.cdoor - 1] & OPENBT) != 0) {
  705.     rspeak_(810);
  706.     }
  707. /*                         !CLOSE CELL DOOR. */
  708.  
  709.     i__1 = objcts_1.olnt;
  710.     for (i = 1; i <= i__1; ++i) {
  711. /*                         !RELOCATE OLD TO HYPER. */
  712.     if (objcts_1.oroom[i - 1] == rindex_1.cell && (objcts_1.oflag1[i - 1] 
  713.         & DOORBT) == 0) {
  714.         i__2 = findex_1.lcell * hyper_1.hfactr;
  715.         newsta_(i, 0, i__2, 0, 0);
  716.     }
  717.     if (objcts_1.oroom[i - 1] == findex_1.pnumb * hyper_1.hfactr) {
  718.         newsta_(i, 0, rindex_1.cell, 0, 0);
  719.     }
  720. /* L17100: */
  721.     }
  722.  
  723.     objcts_1.oflag2[oindex_1.odoor - 1] &= ~ OPENBT;
  724.     objcts_1.oflag2[oindex_1.cdoor - 1] &= ~ OPENBT;
  725.     objcts_1.oflag1[oindex_1.odoor - 1] &= ~ VISIBT;
  726.     if (findex_1.pnumb == 4) {
  727.     objcts_1.oflag1[oindex_1.odoor - 1] |= VISIBT;
  728.     }
  729.  
  730.     if (advs_1.aroom[aindex_1.player - 1] != rindex_1.cell) {
  731.     goto L17400;
  732.     }
  733. /*                         !PLAYER IN CELL? */
  734.     if (findex_1.lcell != 4) {
  735.     goto L17200;
  736.     }
  737. /*                         !IN RIGHT CELL? */
  738.     objcts_1.oflag1[oindex_1.odoor - 1] |= VISIBT;
  739.     f = moveto_(rindex_1.ncell, aindex_1.player);
  740. /*                         !YES, MOVETO NCELL. */
  741.     goto L17400;
  742. L17200:
  743.     f = moveto_(rindex_1.pcell, aindex_1.player);
  744. /*                         !NO, MOVETO PCELL. */
  745.  
  746. L17400:
  747.     findex_1.lcell = findex_1.pnumb;
  748.     return ret_val;
  749. /* NOBJS, PAGE 10 */
  750.  
  751. /* O49--    DIAL INDICATOR */
  752.  
  753. L18000:
  754.     if (prsvec_1.prsa != vindex_1.spinw) {
  755.     goto L18100;
  756.     }
  757. /*                         !SPIN? */
  758.     findex_1.pnumb = rnd_(8) + 1;
  759. /*                         !WHEE */
  760. /*                         ! */
  761.     i__1 = findex_1.pnumb + 712;
  762.     rspsub_(797, i__1);
  763.     return ret_val;
  764.  
  765. L18100:
  766.     if (prsvec_1.prsa != vindex_1.movew && prsvec_1.prsa != vindex_1.putw && 
  767.         prsvec_1.prsa != vindex_1.trntow) {
  768.     goto L10;
  769.     }
  770.     if (prsvec_1.prsi != 0) {
  771.     goto L18200;
  772.     }
  773. /*                         !TURN DIAL TO X? */
  774.     rspeak_(806);
  775. /*                         !MUST SPECIFY. */
  776.     return ret_val;
  777.  
  778. L18200:
  779.     if (prsvec_1.prsi >= oindex_1.num1 && prsvec_1.prsi <= oindex_1.num8) {
  780.     goto L18300;
  781.     }
  782.     rspeak_(807);
  783. /*                         !MUST BE DIGIT. */
  784.     return ret_val;
  785.  
  786. L18300:
  787.     findex_1.pnumb = prsvec_1.prsi - oindex_1.num1 + 1;
  788. /*                         !SET UP NEW. */
  789.     i__1 = findex_1.pnumb + 712;
  790.     rspsub_(808, i__1);
  791.     return ret_val;
  792.  
  793. /* O50--    GLOBAL MIRROR */
  794.  
  795. L19000:
  796.     ret_val = mirpan_(832, 0);
  797.     return ret_val;
  798.  
  799. /* O51--    GLOBAL PANEL */
  800.  
  801. L20000:
  802.     if (play_1.here != rindex_1.fdoor) {
  803.     goto L20100;
  804.     }
  805. /*                         !AT FRONT DOOR? */
  806.     if (prsvec_1.prsa != vindex_1.openw && prsvec_1.prsa != vindex_1.closew) {
  807.  
  808.     goto L10;
  809.     }
  810.     rspeak_(843);
  811. /*                         !PANEL IN DOOR, NOGO. */
  812.     return ret_val;
  813.  
  814. L20100:
  815.     ret_val = mirpan_(838, 1);
  816.     return ret_val;
  817.  
  818. /* O52--    PUZZLE ROOM SLIT */
  819.  
  820. L21000:
  821.     if (prsvec_1.prsa != vindex_1.putw || prsvec_1.prsi != oindex_1.cslit) {
  822.     goto L10;
  823.     }
  824.     if (prsvec_1.prso != oindex_1.gcard) {
  825.     goto L21100;
  826.     }
  827. /*                         !PUT CARD IN SLIT? */
  828.     newsta_(prsvec_1.prso, 863, 0, 0, 0);
  829. /*                         !KILL CARD. */
  830.     findex_1.cpoutf = TRUE_;
  831. /*                         !OPEN DOOR. */
  832.     objcts_1.oflag1[oindex_1.stldr - 1] &= ~ VISIBT;
  833.     return ret_val;
  834.  
  835. L21100:
  836.     if ((objcts_1.oflag1[prsvec_1.prso - 1] & VICTBT) == 0 && (
  837.         objcts_1.oflag2[prsvec_1.prso - 1] & VILLBT) == 0) {
  838.     goto L21200;
  839.     }
  840.     i__1 = rnd_(5) + 552;
  841.     rspeak_(i__1);
  842. /*                         !JOKE FOR VILL, VICT. */
  843.     return ret_val;
  844.  
  845. L21200:
  846.     newsta_(prsvec_1.prso, 0, 0, 0, 0);
  847. /*                         !KILL OBJECT. */
  848.     rspsub_(864, odo2);
  849. /*                         !DESCRIBE. */
  850.     return ret_val;
  851.  
  852. } /* nobjs_ */
  853.  
  854. /* MIRPAN--    PROCESSOR FOR GLOBAL MIRROR/PANEL */
  855.  
  856. /* DECLARATIONS */
  857.  
  858. static logical mirpan_(st, pnf)
  859. integer st;
  860. logical pnf;
  861. {
  862.     /* System generated locals */
  863.     integer i__1;
  864.     logical ret_val;
  865.  
  866.     /* Local variables */
  867.     integer num;
  868.     integer mrbf;
  869.  
  870.     ret_val = TRUE_;
  871.     num = mrhere_(play_1.here);
  872. /*                         !GET MIRROR NUM. */
  873.     if (num != 0) {
  874.     goto L100;
  875.     }
  876. /*                         !ANY HERE? */
  877.     rspeak_(st);
  878. /*                         !NO, LOSE. */
  879.     return ret_val;
  880.  
  881. L100:
  882.     mrbf = 0;
  883. /*                         !ASSUME MIRROR OK. */
  884.     if (num == 1 && ! findex_1.mr1f || num == 2 && ! findex_1.mr2f) {
  885.     mrbf = 1;
  886.     }
  887.     if (prsvec_1.prsa != vindex_1.movew && prsvec_1.prsa != vindex_1.openw) {
  888.     goto L200;
  889.     }
  890.     i__1 = st + 1;
  891.     rspeak_(i__1);
  892. /*                         !CANT OPEN OR MOVE. */
  893.     return ret_val;
  894.  
  895. L200:
  896.     if (pnf || prsvec_1.prsa != vindex_1.lookiw && prsvec_1.prsa != 
  897.         vindex_1.examiw && prsvec_1.prsa != vindex_1.lookw) {
  898.     goto L300;
  899.     }
  900.     i__1 = mrbf + 844;
  901.     rspeak_(i__1);
  902. /*                         !LOOK IN MIRROR. */
  903.     return ret_val;
  904.  
  905. L300:
  906.     if (prsvec_1.prsa != vindex_1.mungw) {
  907.     goto L400;
  908.     }
  909. /*                         !BREAK? */
  910.     i__1 = st + 2 + mrbf;
  911.     rspeak_(i__1);
  912. /*                         !DO IT. */
  913.     if (num == 1 && ! (pnf)) {
  914.     findex_1.mr1f = FALSE_;
  915.     }
  916.     if (num == 2 && ! (pnf)) {
  917.     findex_1.mr2f = FALSE_;
  918.     }
  919.     return ret_val;
  920.  
  921. L400:
  922.     if (pnf || mrbf == 0) {
  923.     goto L500;
  924.     }
  925. /*                         !BROKEN MIRROR? */
  926.     rspeak_(846);
  927.     return ret_val;
  928.  
  929. L500:
  930.     if (prsvec_1.prsa != vindex_1.pushw) {
  931.     goto L600;
  932.     }
  933. /*                         !PUSH? */
  934.     i__1 = st + 3 + num;
  935.     rspeak_(i__1);
  936.     return ret_val;
  937.  
  938. L600:
  939.     ret_val = FALSE_;
  940. /*                         !CANT HANDLE IT. */
  941.     return ret_val;
  942.  
  943. } /* mirpan_ */
  944.